/* 输入：nums = [2,7,11,15], target = 9
输出：[0,1]
解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。 */
nums = [2,7,11,15], target = 18
/* var twoSum = function(nums, target) {
    for(let i=0;i< nums.length;i++){
        for(let j=i+1;j<nums.length;j++){
            if(nums[i]+nums[j]===target){
                return [i,j];
            }
        }
    }
}; */

var twoSum = function(nums, target) 
{
    const numToIndex = {}; // 创建一个空对象来存储数字到索引的映射
 
    for (let i = 0; i < nums.length; i++) {
        const complement = target - nums[i]; // 计算当前数字的补数（即与当前数字相加等于目标值的数）
 
        // 检查补数是否已经在哈希表中
        if (numToIndex.hasOwnProperty(complement)) {
            // 如果找到了，返回补数的索引和当前数字的索引
            return [numToIndex[complement], i];
        }
 
        // 如果补数不在哈希表中，将当前数字及其索引添加到哈希表中
        numToIndex[nums[i]] = i;
    }
 
    // 如果没有找到任何一对元素的和等于目标值，返回null或undefined（或根据需要抛出错误）
    // 注意：根据题目要求，这里假设总会找到一对解，因此实际上不会执行到这里
    // 但在实际应用中，添加这样的处理逻辑是一个好习惯
    return null; // 或 throw new Error("No two sum solution");
};

console.log(twoSum(nums,target));


//时间复杂度O(n^2)
//第二种哈希表的方法时间复杂度为n